プライベートサブネット上のEC2インスタンス(LinuxとWindows)に、クライアント端末からファイルをアップロードする構成2選
はじめに
プライベートサブネット上のEC2インスタンスに、クライアント端末からファイルをアップロードしたい場合、どのような構成がよいか、以下の点を考慮し考えましたので紹介します。
- 「セキュアで運用負荷が低い接続方法」
- 「アップロード方法」
- 「アクセスキーやキーペアの有無」
- 「EC2インスタンスのOS(LinuxまたはWindows)」
具体的なニーズや要件により、最適な構成は異なりますので、紹介した構成は一例であるという点をご理解ください。
接続方法
EC2インスタンスへの接続方法として、パブリックIPアドレスが不要で、かつ、踏み台ホストやキーペアの管理が不要な次の2つの接続方法がおすすめです。(後述しますがキーペアに関しては必要な場合があります。)
- Systems Manager Session Manager(以降、セッションマネージャー)
- EC2 Instance Connect Endpoint(以降、EICエンドポイント)
どちらの方法もクライアント端末からAWS CLIコマンドやマネジメントコンソールで接続できます。
2つの違いは、以下にまとめています。
コストを重視するなら、EICエンドポイントが最適であり、可用性を重視するなら、セッションマネージャーがよいでしょう。
アップロード方法
アップロード方法は、以下の2つがよいかと思います。
- S3バケット経由でEC2インスタンスにファイルをアップロード
- クライアント端末からSSHを使用したSCPコマンドやリモートデスクトッププロトコル(以降、RDP)接続を利用したファイルのアップロード
それぞれのアップロード方法を以下で詳細に説明します。
1 アップロード方法:S3バケット経由
この方法では、AWSマネジメントコンソール上でローカルのファイルをS3にアップロードし、その後接続したEC2インスタンスからS3バケット内のファイルをダウンロードします。
セッションマネージャーでWindowsサーバーに接続する場合、RDP接続での方法の他に、AWSマネジメントコンソール上でSystems Managerを使用したPowerShellへの接続が可能です。
Systems Managerを使用したPowerShellへの接続やLinuxサーバーの場合、AWSマネジメントコンソールだけで完結し、アクセスキーやキーペアが不要です。(ただし、WindowsサーバーにRDP接続する方法はキーペアが必要になります)
この方法のデメリットとしては、ストレージのコストが発生することや、クライアント端末からのファイルアップロードと比較するとS3バケットを経由する手間があることです。
2 アップロード方法:クライアント端末からSCPコマンドやRDP接続
次に、クライアント端末から直接SCPコマンドやRDP接続を使用してローカルのファイルをEC2インスタンスに転送する方法を説明します。
Linuxの場合
SCP(Secure Copy)コマンドは、SSH(Secure Shell)を利用したセキュアなファイル転送が可能です。
したがって、OSがLinuxの場合は、SCPコマンドを利用してファイル転送を行います。
Windows
Windowsサーバーの場合、RDP接続を通じて、クライアント端末からWindowsサーバーにファイル転送することができます。
先程説明した、AWSマネジメントコンソール上でSystems Managerを使用したPowerShellへの接続の場合、クライアント端末から直接ファイル転送はできません。
大量のファイルやサイズが大きいファイルを一度に転送すると、転送速度が遅くなり、効率的に大量のファイルを転送することは難しいです。
また、アクセスキーを発行しクライアント端末に設定したり、キーペアが必要になるというデメリットも存在します。
構成1
アップロード方法として、S3バケットを経由したファイルアップロードが最もおすすめです。
これは、アクセスキーやキーペアが不要という利点があります。(RDP接続は除く)
以下に、この構成の図を示します。
下記の構成では、接続方法にEICエンドポイントとセッションマネージャーのどちらでも選択可能であるため、1つの構成図に含めています。
2つの接続方法で、アクセスキーやキーペアの有無や、AWSマネジメントコンソールで完結するかどうかを表にまとめます
接続方法:EICエンドポイント
項目 |
Windows (ローカルからRDP接続) |
Linux |
---|---|---|
アクセスキー | 必要 | 不要 |
キーペア | 必要 | 不要 |
マネコンで完結 | しない | する |
Linuxサーバーであれば、マネジメントコンソールで完結し、キーペアやアクセスキーが不要です。
一方、Windowsサーバーではクライアント端末からAWS CLIを利用する必要があるため、アクセスキーやキーペアが必要となります。
接続方法の具体的な手順については、以下の記事をご覧ください。
- Linuxの場合
- Windowsの場合
S3バケットへのファイルアップロードは、AWSマネジメントコンソール上で行います。
EC2インスタンスがS3バケット内のファイルをダウンロードするコマンドは、下記が参考になります。
接続方法:セッションマネージャー
セッションマネージャーでは、OSがWindowsの場合、RDP接続とPowerShell接続の2種類があります。
項目 |
Windows (ローカルからRDP接続) |
Windows (マネコンからRDP接続) |
Windows (マネコンからPowerShell) |
Linux |
---|---|---|---|---|
アクセスキー | 必要 | 不要 | 不要 | 不要 |
キーペア | 必要 | 必要 | 不要 | 不要 |
マネコンで完結 | しない | する | する | する |
Windowsサーバーの場合、Systems Managerを使用したPowerShellへの接続では、AWSマネジメントコンソール上で完結し、キーペアやアクセスキーが不要です。
マネジメントコンソールからの接続方法は、下記をご参考ください
- Linuxの場合
- Windowsサーバーの場合
- Systems Managerを使用したPowerShellへの接続
- ローカルからRDP接続
- マネコンからRDP接続
構成2
ファイル転送はS3バケット経由ではなく、クライアント端末から直接ファイルを転送する必要がある場合は、こちらの構成が考えられます。
接続方法は、下記の通り、EICエンドポイントとセッションマネージャーどちらも1つの構成図にいれてます。
接続方法:EICエンドポイント
項目 |
Windows (ローカルからRDP接続) |
Linux |
---|---|---|
アクセスキー | 必要 | 必要 |
キーペア | 必要 | 必要 |
マネコンで完結 | しない | しない |
クライアント端末からAWS CLIコマンドを利用するため、キーペアやアクセスキーが必須です。
Linuxの場合
Linuxサーバーの場合は、下記のコマンドで、EC2インスタンスへの接続やファイル転送が可能です。
//接続のみ $ ssh -i my-key-pair.pem ec2-user@i-0123456789example \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example' //ファイル転送 $ scp -i my-key-pair.pem \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example' \ ./test.txt ec2-user@i-0123456789example:/home/ec2-user/
Windowsの場合
下記の記事通りに、EICエンドポイントでRDP接続設定まで行います。
ファイル転送方法については、次節で解説します。
RDP接続時のファイル転送方法
私のPCがMacなので、MacからRDP接続してファイル転送する方法を解説します。もちろんWindowsでもファイル転送可能です。
クライアント端末がMacの場合、WindowsサーバーにRDP接続するため、Microsoft Remote Desktopアプリケーションを開きます。
編集から、PC nameをlocalhost:13389
(EICエンドポイントのローカルポート)にし、Foldersタブで、Windowsサーバーに転送したいファイルが存在するローカルのフォルダを指定します。
ファイル転送と言いましたが、厳密には、転送ではなくクライアント端末のフォルダをWindowsサーバーと共有します。
今回は、Mac内の/Users/hiraiyuji/test
フォルダをWindowsサーバーと共有します。
クライアント端末の/Users/hiraiyuji/test
配下には、以下のファイルが存在します。
設定完了後、RDP接続を行います。ユーザー名とパスワードを入力するとRDP接続ができます。
Windowsサーバー内で、クライアント端末との共有フォルダが確認できます。
中身もクライアント端末のファイルと同じです。
このファイルをWindowsサーバーの別のディレクトリに移動させることで、クライアント端末のファイルをWindowsサーバーに転送(コピー)できます。
今回、手動でのファイル転送を紹介しました。基本的には、AWS が提供するツールを使って、ローカルPCからタスクスケジューラーなどを利用した自動、かつ、インターネット経由で直接プライベートサブネット上のWindowsサーバーへのファイル転送は実現できません。
Windowsサーバーに自動でファイル転送するには、以下の方法が考えられます。どちらもパブリックサブネットにサーバーやロードバランサーを起動します。
- パブリックサブネットに踏み台サーバー(Windowsサーバー)を起動して、踏み台サーバー経由でファイル転送する
- パブリックサブネットにApplication Load Balancer (ALB)を設置し、Windowsサーバー側でファイルアップロードを受け付ける設定をWebサーバーのIISで行う。そして、PC側のコマンドでURLを指定してファイル転送を行う。
接続方法:セッションマネージャー
項目 |
Windows (ローカルからRDP接続) |
Linux |
---|---|---|
アクセスキー | 必要 | 必要 |
キーペア | 必要 | 必要 |
マネコンで完結 | しない | しない |
EICエンドポイントと同じで、クライアント端末からAWS CLIコマンドを利用するため、キーペアやアクセスキーが必須です。
実際の接続方法は、下記をご参考ください
- Linuxの場合
- Windowsの場合
WindowsサーバーにRDP接続によるファイル転送方法は、EICエンドポイントと同じ、クライアント端末とのフォルダ共有によって実現できます。 先ほどと同様、AWS が提供するツールを使って、自動でのファイル転送はできません。
最後に
プライベートサブネット上のEC2インスタンスに、ファイルをアップロードする構成を2つご紹介しました。
これらの構成が全ての要件に最適というわけではありませんが、ご参考頂ければ幸いです。